#ifndef _SOKOBAN_H
#define _SOKOBAN_H
#include "Sokoban.h"
#include "Terrain.h"
#include "Caisse.h"

typedef enum EtatSokoban{marcheSokoban=0,finSokoban=1}EtatSokoban;
typedef struct 
{
  int x;
  int y;
  EtatSokoban etat;
} Sokoban;


/*Pré-condition: Le pointeur sur Sokoban non prealablement initialisé
 Postcondition: Le Sokoban initialisé */
/*void  sokInit(Sokoban *,const Terrain*);*/
void  sokInit(Sokoban *);

/*Sokoban *sokRecupere(const Terrain *);*/

/*Pré-condition: Le Sokoban et le terrain initialisés et non vides
 Postcondition: Le Sokoban deplacé vers la droite d'une position */
/*Pre-condition: Le terrain et le sokoban son initialise 
  Postcondition :recupere la position du sokoban dans le terrain*/
int sokPosition(const Sokoban *, const Terrain *);

void sokDroite(Sokoban *, const Terrain *, Caisse *);

/*Pre-condition: Le Sokoban et le terrain initialisés et non vides
 Postcondition: Le Sokoban deplacé vers la gauche d'une position */
void sokGauche(Sokoban *, const Terrain *, Caisse *);

/*Pre-condition: Le Sokoban et le terrain initialisés et non vides
 Postcondition: Le Sokoban deplacé vers le haut d'une position */
void sokHaut(Sokoban *, const Terrain *, Caisse *);

/*Pre-condition: Le Sokoban et le terrain initialisés et non vides
 Postcondition: Le Sokoban deplacé vers le bas d'une position */
void sokBas(Sokoban *, const Terrain *, Caisse *);

/*Pre-condition: Le pointeur sur sokoban initialisé
  Postcondition: retourne la position en abcisse x du sokoban*/
int sokGetX(const Sokoban *);

/*Pre-condition: Le pointeur sur sokoban initialisé
  Postcondition: retourne la position en ordonnée y  du sokoban*/
int sokGetY(const Sokoban *);

#endif
